import { VxeGlobalRendererHandles } from "../../../../../types/all";
import XEUtils from "xe-utils";
import { createEditRender, createCellRender, createFormItemRender, createExportMethod } from "./common";

function matchCascaderData(index: number, list: any[], values: any[], labels: any[]) {
    const val = values[index];
    if (list && values.length > index) {
        XEUtils.each(list, (item) => {
            if (item.value === val) {
                labels.push(item.label);
                matchCascaderData(++index, item.children, values, labels);
            }
        });
    }
}

function getCascaderCellValue(renderOpts: VxeGlobalRendererHandles.RenderOptions, params: VxeGlobalRendererHandles.RenderCellParams) {
    const { props = {} } = renderOpts;
    const { row, column } = params;
    const cellValue = XEUtils.get(row, column.field as string);
    const values = cellValue || [];
    const labels: Array<any> = [];
    matchCascaderData(0, props.options, values, labels);
    return (props.showAllLevels === false ? labels.slice(labels.length - 1, labels.length) : labels).join(` ${props.separator || "/"} `);
}

export default {
    renderEdit: createEditRender(),
    renderCell: createCellRender(getCascaderCellValue),
    renderItemContent: createFormItemRender(),
    exportMethod: createExportMethod(getCascaderCellValue),
};
